﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using IUAP.DAL;
using IUAP.DAL.Articulo;

namespace IUAP.BLL.Articulo
{
    public class Categoria : BaseArticulo
    {
        private string titu_cate = "";

        public string Titu_cate
        {
            get { return titu_cate; }
            set { titu_cate = value; }
        }

        private int impo_cate = 0;

        public int Impo_cate
        {
            get { return impo_cate; }
            private set { impo_cate = value; }
        }

        private string desc_cate = "";

        public string Desc_cate
        {
            get { return desc_cate; }
            set { desc_cate = value; }
        }

        private string imgurl_cate = "";

        public string Imgurl_cate
        {
            get { return imgurl_cate; }
            set { imgurl_cate = value; }
        }
        private List<Articulo> allArticles = null;
        public List<Articulo> AllArticles
        {
            get
            {
                if (allArticles == null)
                    allArticles = Articulo.GetArticles(this.Id, 0, BizObject.MAXROWS);
                return allArticles;
            }
        }
        private List<Articulo> articulos_publicados = null;
        public List<Articulo> Articulos_publicados
        {
            get
            {
                if (articulos_publicados == null)
                    articulos_publicados = Articulo.GetArticles(true, this.Id, 0, BizObject.MAXROWS);
                return articulos_publicados;
            }
        }
        public Categoria(int id_categoria, DateTime fecha_cate, string usua_cate, string titu_cate, int impo_cate, string desc_cate, string imgurl_cate)
        {
            this.Id = id_categoria;
            this.Fecha = fecha_cate;
            this.Usuario = usua_cate;
            this.Titu_cate = titu_cate;
            this.Impo_cate = impo_cate;
            this.Desc_cate = desc_cate;
            this.Imgurl_cate = imgurl_cate;
        }
        public bool Delete()
        {
            bool success = Categoria.DeleteCategory(this.Id);
            if (success)
                this.Id = 0;
            return success;
        }
        public bool Update()
        {
            return Categoria.UpdateCategory(this.Id, this.Titu_cate, this.Impo_cate, this.Imgurl_cate, this.Desc_cate);
        }
        public static bool UpdateCategory(int Id, string titu_cate, int impo_cate, string imgurl_cate, string desc_cate)
        {
            CategoriaDetalles record = new CategoriaDetalles(Id, DateTime.Now, "", titu_cate, impo_cate, desc_cate, imgurl_cate);
            bool ret = SiteProvider.Articulos.UpdateCategoria(record);
            BizObject.PurgeCacheItems("articles_categor");
            return ret;
        }
        public static bool DeleteCategory(int Id)
        {
            bool ret = SiteProvider.Articulos.DeleteCategoria(Id);
            new RecordDeletedEvent("category", Id, null).Raise();
            BizObject.PurgeCacheItems("articles_categor");
            return ret;
        }
        public static int InsertCategory(string titu_cate, int impo_cate, string desc_cate, string imgurl_cate)
        {
            CategoriaDetalles record = new CategoriaDetalles(0, DateTime.Now,
               BizObject.CurrentUserName, titu_cate, impo_cate, desc_cate, imgurl_cate);
            int ret = SiteProvider.Articulos.InsertCategoria(record);
            BizObject.PurgeCacheItems("articles_categor");
            return ret;
        }
        public static List<Categoria> GetCategories()
        {
            List<Categoria> categories = null;
            string key = "Articles_Categories";

            if (BaseArticulo.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                categories = (List<Categoria>)BizObject.Cache[key];
            }
            else
            {
                List<CategoriaDetalles> recordset = SiteProvider.Articulos.GetCategoria();
                categories = GetCategoryListFromCategoryDetailsList(recordset);
                BaseArticulo.CacheData(key, categories);
            }
            return categories;
        }
        public static Categoria GetCategoryByID(int Id)
        {
            Categoria categoria = null;
            string key = "Articles_Category_" + Id.ToString();

            if (BaseArticulo.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                categoria = (Categoria)BizObject.Cache[key];
            }
            else
            {
                categoria = GetCategoryFromCategoryDetails(SiteProvider.Articulos.GetCategoriabyID(Id));
                BaseArticulo.CacheData(key, categoria);
            }
            return categoria;
        }
        private static Categoria GetCategoryFromCategoryDetails(CategoriaDetalles record)
        {
            if (record == null)
                return null;
            else
            {
                return new Categoria(record.Id_categoria, record.Fech_cate, record.Usua_cate,
                   record.Titu_cate, record.Impo_cate, record.Desc_cate, record.Imgurl_cate);
            }
        }
        private static List<Categoria> GetCategoryListFromCategoryDetailsList(List<CategoriaDetalles> recordset)
        {
            List<Categoria> categorias = new List<Categoria>();
            foreach (CategoriaDetalles record in recordset)
                categorias.Add(GetCategoryFromCategoryDetails(record));
            return categorias;
        }
    }
}
